#!/usr/bin/perl
#use HTML::Table;
no if $] >= 5.018, warnings => "experimental::smartmatch"; #No muetra los warning de los when
sub stringHora{
	($sec,$min,$hour,$mday,$mon,$year,$wday,$yday,$isdst) = localtime(time);
	$mon++;
	$year+=1900;
	$repId = "$year"."$mon"."$mday"."$hour"."$min"."$sec";
}
sub ExisteEnVector{  
      my ($vector,$item) = @_;  
      my %items = map {$_ => 1} @$vector;
      my $existe = (exists($items{$item}))?1:0;  
      return $existe;
}
sub mostrarMenu{
	print "Las opciones disponibles son:\n
		-a (ayuda)\n
		-w (grabar)\n
		-r (precio de referencia)\n
		-m (menos precio)\n
		-d (donde comprar)\n
		-f (faltante)\n
		-x (filtrar por provincia-supermercado)\n
		-u (filtrar por usuario)\n\n";
}
sub menuAyuda{

	print "\n\tPrograma: Reporting.pl  -- Autor: Grupo 5
	Descripcion: Genera un reporte de listado de compras presupuestadas en base a queries
				 definidas por el usuario.
				 
	Modo de uso: Reporting.pl
	-----------------------------------------------------------------------\n
	-a (ayuda)
		Muestra este menu\n
	-d (donde comprar con precio de referencia)
		Muestra todos los productos de menor precio separandolos por lugar de compra\n
	-dr (donde comprar con precio de referencia)
		Muestra todos los productos de menor precio separandolos por lugar de compra, mostrando los precios de referencia\n
	-exit (Salir del Reporting)\n
	-f (faltante)
		Muestra los productos que no tienen precio\n
	-m (menor precio)
		Muestra solo el producto de menor precio (del mismo producto)\n
	-mr (menor precio con precio de referencia)
		Muestra solo el producto de menor precio (del mismo producto), incluyendo el producto de referencia aunque no sea el menor\n
	-r (precio de referencia) (combinable con m y d)
		Muestra los precios de referancia
		Ejemplos: -dr
		          -mr\n
	-u (filtrar por usuario)
		Se ingresa el nombre de usuario por el que se desea filtrar
		Si se quiere borrar el filtro se ingresa un '*'\n
	-x (filtrar por provincia-supermercado)
		Muestra un listado de los supermercados
		Se ingresa el supermercado a agregar (se agrega uno por vez)
		Si se quieren borrar los filtros existentes se ingresa '*'
		Si no se quieren agregar/borrar filtros, se ingresa 'buscar' para proseguir
		Ejemplo: Buenos Aires - Coto
		         Buenos Aires - Walkmart\n
	-w (grabar)
		Todas las opciones son combinables con w (agregar al final)
		Graba el informe que se muestra por pantalla.
		Ejemplos: -dw
		          -drw
		          -mw
		          -mrw\n
\n\n\n"
}
sub d{
	my $r = $_[0];
	my $w = $_[1];
if (opendir(DIRH,"$dirpres")){
	@flist=readdir(DIRH);
	closedir(DIRH);
	}
my @Datos;
if ($w eq "1"){
	&stringHora;
	open(MIFICH,">$infodir/info_$repId")|| die "lo siento, no se puedo crear el archivo de la consulta\n";
	print MIFICH "Se ejecutó el comando -d";
	if ($r eq "1"){
		print MIFICH "r";
	}
	print MIFICH "w";
	if ($usuario ne ""){
		print MIFICH " con usuario = $usuario ";
	}
	if (@idSuperUtilizables != @Vacio){
		print MIFICH " usando estos supermercados";
		for my $registro ( @idSuperUtilizables){
			print MIFICH "$listadoSuper{$registro}; ";
		}
	}
}
foreach $archivo (@flist){ 
	next if ($archivo eq "." || $archivo eq ".."); #ignorar . y ..
	# Toma solo los archivos del usuario especificado (si se ingreso el filtro)
	next if ($usuario ne "" and not $archivo=~ /$usuario\./);


	if ( -r "$dirpres/$archivo"){
		#print "Esta lista presupuestable es leible $dirpres/$archivo \n"; 
		print "\nLISTA PRESUPUESTADA: " . $archivo . "\n";
		print "\nObs | id_Item | Nombre Producto | Nombre producto maestro | Precio\n";

		if ($w eq "1"){
			print MIFICH "\nLISTA PRESUPUESTADA: " . $archivo . "";
			print MIFICH "\nObs | id_Item | Nombre Producto | Nombre producto maestro | Precio\n";
		}
		if ($r eq "1"){
			print "Estos son los precios de referencia \n";
			if ($w eq "1"){
				print MIFICH "Estos son los precios de referencia \n";
			}
		}
		open ENTRADA,"<$dirpres/$archivo" or die "ERROR: no se puede abrir el fichero $dirpres/$archivo\n";
		while (<ENTRADA>){
			chomp;
			# Realiza split dejando los campos que interesan para el hash, clave y valor
			($idItem, $prodPedido, $idSuper, $ProdEcontrado, $precio) = split(";");
			$obs = " ";
			if ($idSuper != ""){
				if ($r eq "1"){
					if ($idSuper < 100){
						$obs = "R"; # Marco el precio de referencia
					}
				}
				if (@idSuperUtilizables != @Vacio){
					#Solo muestra los productos de los super elegidos
					if (&ExisteEnVector(\@idSuperUtilizables, $idSuper) == 1){
						push @Datos, {
							idItem => $idItem, 
							prodPedido => $prodPedido, 
							idSuper => $idSuper,
							ProdEcontrado => $ProdEcontrado, 
							precio => $precio,
							obs => $obs
							};
					}
				}else{
					#print @idSuperUtilizables;
					push @Datos, {
						idItem => $idItem, 
						prodPedido => $prodPedido, 
						idSuper => $idSuper,
						ProdEcontrado => $ProdEcontrado, 
						precio => $precio,
						obs => $obs
						};	
				}}
			}
	my @DatosOrdenados = sort { 
		$a->{idSuper} <=> $b->{idSuper} or 
		$a->{idItem} <=> $b->{idItem} or
		$a->{precio} cmp $b->{precio} or
		$a->{prodPedido} cmp $b->{prodPedido} or 
		$a->{ProdEcontrado} cmp $b->{ProdEcontrado}
		 } @Datos;
	my $lugarAnterior="";
	my $lugarActual;
	
	my $itemAnterior="";
	my $itemActual;
	
	for my $registro ( @DatosOrdenados){
		if ($registro->{idSuper} eq "") { next;}
		if ($registro->{idSuper}<100) {
			if ($r eq "1"){
				$regRef=$registro;
				print $regRef->{obs}." | ". $regRef->{idItem} ." | ". $regRef->{prodPedido} ." | ". $regRef->{ProdEcontrado} ." | ". $regRef->{precio}."\n";
				}
				next;
			}
		$lugarActual = $registro->{idSuper};
		$itemActual = $registro->{idItem};
		if ($lugarActual != $lugarAnterior){
			print "\n$listadoSuper{$registro->{idSuper}}\n"; #Cambia el lugar de compra
			if ($w eq "1"){
				print MIFICH "\n$listadoSuper{$registro->{idSuper}}\n";
			}
		}
		if ($itemActual ne $itemAnterior){
			print $registro->{obs}." | ". $registro->{idItem} ." | ". $registro->{prodPedido} ." | ". $registro->{ProdEcontrado} ." | ". $registro->{precio}."\n";
			if ($w eq "1"){
				print MIFICH $registro->{obs}." | ". $registro->{idItem} ." | ". $registro->{prodPedido} ." | ". $registro->{ProdEcontrado} ." | ". $registro->{precio}."\n";
			}
		}
		$itemAnterior = $itemActual;
		$lugarAnterior = $lugarActual;
	}
	@Datos = '';
	@DatosOrdenados = '';
		}
	}
	if ($w eq "1"){
		close(MIFICH);
	}
}
sub m{
	my $r = $_[0];
	my $w = $_[1];

if (opendir(DIRH,"$dirpres")){
	@flist=readdir(DIRH);
	closedir(DIRH);
	}
my @Datos;
if ($w eq "1"){
	&stringHora;
	open(MIFICH,">$infodir/info_$repId")|| die "lo siento, no se puedo crear el archivo de la consulta\n";
	print MIFICH "Se ejecutó el comando -m";
	if ($r eq "1"){
		print MIFICH "r";
	}
	print MIFICH "w";
	if ($usuario ne ""){
		print MIFICH " con usuario = $usuario ";
	}
	if (@idSuperUtilizables != @Vacio){
		print MIFICH " usando estos supermercados";
		for my $registro ( @idSuperUtilizables){
			print MIFICH "$listadoSuper{$registro}; ";
		}
	}
}
foreach $archivo (@flist){ 
	
	next if ($archivo eq "." || $archivo eq ".."); #ignorar . y ..
	next if ($usuario ne "" and not $archivo=~ /$usuario\./);

	if ( -r "$dirpres/$archivo"){
		print "\nLISTA PRESUPUESTADA: $archivo \n\n";
		if ($w eq "1"){ print MIFICH "\nLISTA PRESUPUESTADA: $archivo \n\n";}
		open ENTRADA,"<$dirpres/$archivo" or die "ERROR: no se puede abrir el fichero $dirpres/$archivo\n";
		while (<ENTRADA>){
			chomp;
			# Realiza split dejando los campos que interesan para el hash, clave y valor
			($idItem, $prodPedido, $idSuper, $ProdEcontrado, $precio) = split(";");
			$obs = " ";
			if ($idSuper != ""){
				
				if ($r eq "1"){
					if ($idSuper < 100){
						$obs = "R"; # Marco el precio de referencia
					}
				}	
				if (@idSuperUtilizables != @Vacio){
					#Solo muestra los productos de los super elegidos
					if (&ExisteEnVector(\@idSuperUtilizables, $idSuper) == 1){
						push @Datos, {
							idItem => $idItem, 
							prodPedido => $prodPedido, 
							idSuper => $idSuper,
							ProdEcontrado => $ProdEcontrado, 
							precio => $precio,
							obs => $obs
							};
					}
				}else{
					push @Datos, {
						idItem => $idItem, 
						prodPedido => $prodPedido, 
						idSuper => $idSuper,
						ProdEcontrado => $ProdEcontrado, 
						precio => $precio,
						obs => $obs
						};	
				}}
			}
		}
		
	my @DatosOrdenados = sort { 
		$a->{idItem} <=> $b->{idItem} or 
		$a->{idSuper} <=> $b->{idSuper} or
		$a->{prodPedido} cmp $b->{prodPedido} or 
		$a->{ProdEcontrado} cmp $b->{ProdEcontrado} or
		$a->{precio} cmp $b->{precio}
		 } @Datos;
	my $itemAnterior;
	my $itemActual;
	my $precioActual;
	my $precioMin=0;
	my $regMin;
	my $precioRef;
	my $productoRef;
	my $regRef;
	print "\nObs | id_Item | Nombre Producto | Nombre producto maestro | Precio\n";
	if ($w eq "1"){	print MIFICH "\nObs | id_Item | Nombre Producto | Nombre producto maestro | Precio\n";}
	
	for my $registro ( @DatosOrdenados){
	
		
		if ($r ne "1"){ next if ($registro->{idSuper}<100);} #no incluyo precios cuidados
			else{ #sistema de asignacion de comentario para opcion r
				if ($registro->{idSuper}<100){
					$precioRef=$registro->{precio};
					$productoRef=$registro->{idItem};
					$regRef=$registro;
					next;
					}else{
						if ($registro->{idItem} != $productoRef){
							$registro->{obs}="***"
							}else{
								if ($registro->{precio}<=$precioRef){
									$registro->{obs}="*";							
									}else{
										$registro->{obs}="**";
									}
							}
						}
						
				
				}
		$itemActual = $registro->{idItem};
		$precioActual = $registro->{precio};
		
		if ($itemActual == $itemAnterior){
			if ($precioActual <= $precioMin){
					$regMin=$registro;
					$precioMin=$precioActual;
				}
		}else{
			if ($regMin->{idItem} ne ""){
				print $regMin->{obs}." | ". $regMin->{idItem} ." | ". $regMin->{prodPedido} ." | ". $regMin->{ProdEcontrado} ." | ". $regMin->{precio}."\n";
				if ($w eq "1"){	print MIFICH $regMin->{obs}." | ". $regMin->{idItem} ." | ". $regMin->{prodPedido} ." | ". $regMin->{ProdEcontrado} ." | ". $regMin->{precio}."\n";} #se ejecuta por ultima vez el print para que el ultimo de la lista cuente
			
			
				if ($r eq "1"){
					if($regMin->{obs} ne "***"){
						print $regRef->{obs}." | ". $regRef->{idItem} ." | ". $regRef->{prodPedido} ." | ". $regRef->{ProdEcontrado} ." | ". $regRef->{precio}."\n";
						if ($w eq "1"){	print MIFICH $regRef->{obs}." | ". $regRef->{idItem} ." | ". $regRef->{prodPedido} ." | ". $regRef->{ProdEcontrado} ." | ". $regRef->{precio}."\n";}

					} #si hay precio de referencia, imprimirlo.
				}
			}
			$regMin=$registro;
			$precioMin=$precioActual;
			
			}	
		$itemAnterior = $itemActual;
	}
	print $regMin->{obs}." | ". $regMin->{idItem} ." | ". $regMin->{prodPedido} ." | ". $regMin->{ProdEcontrado} ." | ". $regMin->{precio}."\n"; #se ejecuta por ultima vez el print para que el ultimo de la lista cuente
	if ($w eq "1"){	print MIFICH $regMin->{obs}." | ". $regMin->{idItem} ." | ". $regMin->{prodPedido} ." | ". $regMin->{ProdEcontrado} ." | ". $regMin->{precio}."\n";} #se ejecuta por ultima vez el print para que el ultimo de la lista cuente

	if ($r eq "1"){
				if($regMin->{obs} ne "***"){
					print $regRef->{obs}." | ". $regRef->{idItem} ." | ". $regRef->{prodPedido} ." | ". $regRef->{ProdEcontrado} ." | ". $regRef->{precio}."\n\n";
					if ($w eq "1"){	print MIFICH $regRef->{obs}." | ". $regRef->{idItem} ." | ". $regRef->{prodPedido} ." | ". $regRef->{ProdEcontrado} ." | ". $regRef->{precio}."\n\n";}

				} #si hay precio de referencia, imprimirlo.
			}
	
			
	@Datos = '';
	@DatosOrdenados = '';	
	}
	if ($w eq "1"){
		close(MIFICH);
	}
}
sub f{
my $w = $_[0];
if (opendir(DIRH,"$dirpres")){
	@flist=readdir(DIRH);
	closedir(DIRH);
	}
if ($w eq "1"){
	&stringHora;
	open(MIFICH,">$infodir/info_$repId")|| die "lo siento, no se puedo crear el archivo de la consulta\n";
	print MIFICH "Se ejecutó el comando -fw";
	if ($usuario ne ""){
		print MIFICH " con usuario = $usuario ";
	}
	if (@idSuperUtilizables != @Vacio){
		print MIFICH " usando estos supermercados";
		for my $registro ( @idSuperUtilizables){
			print MIFICH "$listadoSuper{$registro}; ";
		}
	}
}
foreach $archivo (@flist){ 
	next if ($archivo eq "." || $archivo eq ".."); #ignorar . y ..
	next if ($usuario ne "" and not $archivo=~ /$usuario\./);

	if ( -r "$dirpres/$archivo"){
		#print "Esta lista presupuestable es leible $dirpres/$archivo \n"; 
		print "\nLISTA PRESUPUESTADA: " . $archivo . "";
		print "\nid_Item | Nombre Producto | idSuper | Nombre producto maestro\n\n";
		if ($w eq "1"){
			print MIFICH "\nLISTA PRESUPUESTADA: " . $archivo . "";
			print MIFICH "\nid_Item | Nombre Producto | idSuper | Nombre producto maestro\n\n";
		}
		open ENTRADA,"<$dirpres/$archivo" or die "ERROR: no se puede abrir el fichero $dirpres/$archivo\n";		
		while (<ENTRADA>){
			chomp;
			# Realiza split dejando los campos que interesan para el hash, clave y valor
			($idItem, $prodPedido, $idSuper,$ProdEcontrado, $precio)=split(";");

			if ($precio == ""){
					print $idItem." | ".$prodPedido." | ".$idSuper." | ".$ProdEncontrado."\n";
					if ($w eq "1"){
						print MIFICH $idItem." | ".$prodPedido." | ".$idSuper." | ".$ProdEncontrado."\n";
					}
				}
			}
		close(ENTRADA);
		}
	}
	if ($w eq "1"){
		close(MIFICH);
	}
}
sub r{
	my $w = $_[0];
	if (opendir(DIRH,"$dirpres")){
		@flist=readdir(DIRH);
		closedir(DIRH);
	}
	if ($w eq "1"){
		&stringHora;
		open(MIFICH,">$infodir/info_$repId")|| die "lo siento, no se puedo crear el archivo de la consulta\n";
		print MIFICH "Se ejecutó el comando -rw";
		if ($usuario ne ""){
			print MIFICH " con usuario = $usuario ";
		}
		if (@idSuperUtilizables != @Vacio){
			print MIFICH " usando estos supermercados";
			for my $registro ( @idSuperUtilizables){
				print MIFICH "$listadoSuper{$registro}; ";
			}
		}
	}
	foreach $archivo (@flist){ 
	
		next if ($archivo eq "." || $archivo eq ".."); #ignorar . y ..
		next if ($usuario ne "" and not $archivo=~ /$usuario\./);
		

		if ( -r "$dirpres/$archivo"){
			#print "Esta lista presupuestable es leible $dirpres/$archivo \n"; 
			open ENTRADA,"$dirpres/$archivo" or die "ERROR: no se puede abrir el fichero $archivo : $!\n";
			
			print "\nLISTA PRESUPUESTADA: " . $archivo . "\n";
			print "Estos son los productos con precios de referencia\n";
			print "\nid_Item | Nombre Producto | Nombre producto maestro | Precio\n\n";
			if ($w eq "1"){
				print MIFICH "\nLISTA PRESUPUESTADA: " . $archivo . "\n";
				print MIFICH "Estos son los productos con precios de referencia\n";
				print MIFICH "\nid_Item | Nombre Producto | Nombre producto maestro | Precio\n\n";
			}
			my $prodActual = "";
			my $prodAnterior = "";
			while (<ENTRADA>){
				chomp;
				# Realiza split dejando los campos que interesan para el hash, clave y valor
				($idItem, $prodPedido, $idSuper,$ProdEcontrado, $precio)=split(";");
				if ($idSuper < 100 and $precio ne ""){
					$prodActual = $idItem;
					if ($prodActual ne $prodAnterior){
						print $idItem." | ".$prodPedido." | ".$ProdEcontrado." | ".$precio."\n";
						if ($w eq "1"){
							print MIFICH $idItem." | ".$prodPedido." | ".$ProdEcontrado." | ".$precio."\n";
						}
					}
					$prodAnterior = $prodActual;
				}
			}			
		}
	}
}
sub u{ 
	print "Listado de usuarios actuales con listas de compra presupuestadas\n\n";
	for my $registro ( @usuariosActuales){
		print $registro."\n";
	}
	print "\nExcriba el nombre del usuario, o escriba * si desea borrar el filtro\n";
	chomp($usuario=<STDIN>);
	if ($usuario eq "*"){
		$usuario = "";
	}
}
sub xMenu{
#	if ( -r "$maedir/super.mae"){
#		open ARCHMAE,"<$maedir/super.mae" or die "ERROR: no se puede abrir el archivo maestro super.mae\n";	
#		while (<ARCHMAE>){
#			($idSuper, $nomProv, $nomSuper,$dco, $tipoDoc, $direccion)=split(";");
#			if ($idSuper >= 100){
#				$superProv{$idSuper} = $nomProv . " - " . $nomSuper;
#			}
#		}
#		closedir(ARCHMAE);
#	}
	if (opendir(DIRH,"$dirpres")){
		@flist=readdir(DIRH);
		closedir(DIRH);
	}
	my @superActuales;
	foreach $archivo (@flist){ 
		next if ($archivo eq "." || $archivo eq ".."); #ignorar . y ..
		next if ($usuario ne "" and not $archivo=~ /$usuario\./);
		if ( -r "$dirpres/$archivo"){

			open ENTRADA,"$dirpres/$archivo" or die "ERROR: no se puede abrir el fichero $archivo : $!\n";
			while (<ENTRADA>){
				chomp;
				($idItem, $prodPedido, $idSuper,$ProdEcontrado, $precio)=split(";");
				if ($idSuper >=100 and &ExisteEnVector(\@superActuales, $idSuper) == 0){
					push (@superActuales, $idSuper);
				}
			}
		}
	}
	foreach my $super  ( sort @superActuales ){
		print $listadoSuper{$super}."\n";
	}
#	my $prov = "";
#	my $provAnt ="";

#	foreach my $provincia (sort {lc($a) cmp lc($b)} values %superProv){
#		$prov = $provincia;
#		if ($prov ne $provAnt){
#			print $prov . "\n";
#		}
#		$provAnt = $prov;
#	}   Lista las provincias ordenadas sin repetir

#	foreach my $super (sort {lc($a) cmp lc($b)} values %listadoSuper){
#		$prov = $super;
#		if ($prov ne $provAnt){
#			print $prov . "\n";
#		}
#		$provAnt = $prov;
#	}
	do{
		print "\nElija el supermercado desea agregar, Con * borra los filtros anteriores, Si no desea agregar mas, ingrese buscar\n";
		
		chomp($var=<STDIN>);
		if ($var eq "*"){
			@idSuperUtilizables = @Vacio;
			print "Se han borrado los filtros \n";
		}else{
			foreach my $llave (sort keys %listadoSuper){
				if ($var eq $listadoSuper{$llave} and &ExisteEnVector(\@idSuperUtilizables, $llave) == 0){
					push (@idSuperUtilizables, $llave);
					#print $idSuperUtilizables{$llave};
				}
			}
		}
	}until($var eq "buscar");
	#print @idSuperUtilizables; #Vector con los id de los supermercados a utilizar
	#print "\n";
}
sub CargarHashes{
	# Carga $listadoSuper con todos los id y provincias - nombres de supermercados
	open ARCHMAE,"<$maedir/super.mae" or die "ERROR: no se puede abrir el archivo maestro super.mae\n";	
	while (<ARCHMAE>){
		($idSuper, $nomProv, $nomSuper,$dco, $tipoDoc, $direccion)=split(";");
		$listadoSuper{$idSuper} = $nomProv . " - " . $nomSuper;
	}
	closedir(ARCHMAE);
	
	my @usuarios;
	if (opendir(DIRH,"$dirpres")){
		@flist=readdir(DIRH);
		closedir(DIRH);
	}
	foreach $archivo (@flist){ 
		$position = rindex($archivo, ".");
		$fileName = substr($archivo, 0, $position);
		push (@usuarios, $fileName);
	}
	@usuarios = sort @usuarios;
	my $usuarioActual="";
	my $usuarioAnterior = "";
	for my $registro ( @usuarios){
		$usuarioActual = $registro;
		if ($usuarioActual ne $usuarioAnterior and $usuarioActual ne "."){
			push (@usuariosActuales, $usuarioActual);
		}
		$usuarioAnterior = $usuarioActual;
	}
	
	$usuario = "";
	@Vacio = "";
	@idSuperUtilizables = @Vacio;
}
use feature qw/switch/; 
$a1 = $ARGV[0];

# Chquear que las variables de ambiente estén inicializadas
$envcheck = `envcheck.sh`;
if ($envcheck eq 1) {`glog.sh "Reporte" E "El ambiente no está inicializado"`; exit 1;}

# Chequear que no hayan otros comandos ejecutándose
if (`obtpid.sh iniciar.sh`){`glog.sh "Reporte" E "Está corriendo el comando INICIAR"`; exit 2;}
if (`obtpid.sh detectar.sh`){`glog.sh "Reporte" E "Está corriendo el comando DETECTAR"`; exit 2;}
if (`obtpid.sh interprete.sh`){`glog.sh "Reporte" E "Está corriendo el comando INTERPRETE"`; exit 2;}
if (`obtpid.sh reporte.sh`){`glog.sh "Reporte" E "Está corriendo el comando REPORTE"`; exit 2;}

print "Bienvenido a Reporting\n";
#print $ENV{'MAEDIR'}."\n";
$infodir=$ENV{'INFODIR'};
$maedir=$ENV{'MAEDIR'};#hardcode

$dirpres = "$infodir/pres";
&CargarHashes;
&mostrarMenu;
do{
	print "\nEscriba su consulta\n";
	if ($#ARGV==-1){ #No hay argumentos
		chomp($var=<STDIN>);
		given ($var) {
				when("-a") { &menuAyuda; }
				when("-d") { &d; }
				when("-dr") { &d("1","0"); }
				when("-dw") { &d("0","1"); }
				when("-drw") { &d("1","1"); }
				when("-exit") { exit 0; }
				when("-f") { &f("0"); }
				when("-fw") { &f("1"); }
				when("-m") { &m; }
				when("-mr") { &m("1");}
				when("-mw"){ &m("0","1");}
				when("-mrw") { &m("1","1"); }
				when("-r") { &r; }
				when("-rw") { &r("1"); }
				when("-u") { &u; }
				when("-x") { &xMenu; }
				default { print STDERR "vuelva a escribir, opcion incorrecta\n";}		
			}
		}
# loop infinito hasta que se ponga salir
}until(1 == 2) 
